Multi-stage builds হল Docker-এর একটি শক্তিশালী ফিচার যা Dockerfile-এর বিভিন্ন অংশকে আলাদা স্টেজে বিভক্ত করে। এই পদ্ধতিতে, একটি ইমেজের একটি স্টেজ থেকে অন্য স্টেজে আউটপুট স্থানান্তর করা হয়, ফলে ইমেজের আকার ছোট এবং নির্মাণের প্রক্রিয়া আরো কার্যকর হয়। নিচে Multi-stage build এবং Dockerfile optimization এর উপর বিস্তারিত আলোচনা করা হলো।
Multi-stage Build
Multi-stage builds এর প্রধান উদ্দেশ্য হল Docker Image-এর আকার কমানো এবং নির্মাণ প্রক্রিয়ার দক্ষতা বাড়ানো।
কিভাবে কাজ করে:
বিভিন্ন স্টেজ: একটি Dockerfile-এ একাধিক FROM নির্দেশনা ব্যবহার করে বিভিন্ন স্টেজ তৈরি করা যায়। প্রতিটি স্টেজ তার নিজস্ব বেস ইমেজ ব্যবহার করতে পারে।
নির্ভরশীলতা ইনস্টলেশন: প্রথম স্টেজে সমস্ত নির্ভরশীলতা ইনস্টল করা হয় এবং অ্যাপ্লিকেশন নির্মাণ করা হয়।
আউটপুট স্থানান্তর: দ্বিতীয় স্টেজে শুধুমাত্র প্রয়োজনীয় ফাইলগুলি স্থানান্তর করা হয়, যেমন সংকলিত বাইনরি বা কনফিগারেশন ফাইল।
উদাহরণ
নিচে একটি Multi-stage Dockerfile এর উদাহরণ দেওয়া হলো:
# প্রথম স্টেজ: বিল্ডিং
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
# অ্যাপ্লিকেশন বিল্ড করুন
RUN go build -o myapp .
# দ্বিতীয় স্টেজ: প্রযোজ্য ইমেজ তৈরি
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
# কনটেইনার চালানোর জন্য কমান্ড
CMD ["./myapp"]
Dockerfile Optimization
Dockerfile-কে অপ্টিমাইজ করার জন্য কয়েকটি গুরুত্বপূর্ণ পদ্ধতি আছে, যা ইমেজের আকার এবং নির্মাণের সময় কমাতে সহায়ক।
১. লেয়ার কমানো
- বর্ণনা: Docker ইমেজে প্রতিটি
RUN,COPY, এবংADDনির্দেশনা একটি নতুন লেয়ার তৈরি করে। লেয়ার সংখ্যা কমানোর চেষ্টা করুন। - কিভাবে: একাধিক কমান্ডকে একটি
RUNকমান্ডে একত্রিত করুন।
RUN apt-get update && apt-get install -y package1 package2
২. ক্যাশে ব্যবহার করা
- বর্ণনা: Docker ইমেজ নির্মাণের সময় ক্যাশে ব্যবহারের ফলে পুনরায় কাজ করার প্রয়োজন হয় না।
- কিভাবে: ফাইলগুলো কম頻নশীল পরিবর্তন হলে সেগুলো আগে রাখুন, যেমন
COPYএবংRUNকমান্ডের আদেশ।
৩. প্রয়োজনীয় ফাইল কপি করা
- বর্ণনা: শুধুমাত্র প্রয়োজনীয় ফাইলগুলো Docker ইমেজে কপি করুন।
- কিভাবে:
.dockerignoreফাইল ব্যবহার করে অপ্রয়োজনীয় ফাইলগুলোকে বাদ দিন।
# .dockerignore
node_modules
*.log
temp/
৪. আর্কিটেকচার এবং ফাইল সিস্টেম নির্বাচন
- বর্ণনা: হালকা বেস ইমেজ নির্বাচন করা।
- কিভাবে:
alpineইমেজ ব্যবহার করা যা সাধারণত ছোট এবং দ্রুত।
৫. কমান্ডের সংখ্যা কমানো
- বর্ণনা: ব্যবহারকারী যখন
CMDবাENTRYPOINTব্যবহার করেন, তখন একটি কমান্ডের ভিতরে সমস্ত আর্গুমেন্টগুলি অন্তর্ভুক্ত করুন। - কিভাবে: JSON সিনট্যাক্স ব্যবহার করুন যা আর্গুমেন্টকে সঠিকভাবে পরিচালনা করে।
CMD ["executable", "param1", "param2"]
সারসংক্ষেপ
Multi-stage builds Dockerfile-এর শক্তিশালী ফিচার যা ইমেজের আকার কমাতে এবং নির্মাণের কার্যকারিতা বাড়াতে সাহায্য করে। Dockerfile অপ্টিমাইজেশন বিভিন্ন পদ্ধতির মাধ্যমে করা যেতে পারে, যেমন লেয়ার সংখ্যা কমানো, ক্যাশে ব্যবহারের সুবিধা নেওয়া, এবং প্রয়োজনীয় ফাইল কপি করা। এই সমস্ত পদ্ধতি Docker ইমেজ তৈরি করার সময় কর্মক্ষমতা এবং কার্যকারিতা উন্নত করতে সহায়ক।
Read more